package single

import (
	"os"
	"path/filepath"

	"github.com/gofrs/flock"
)

var lock *flock.Flock

// Lock 尝试在系统临时目录下创建并锁定一个名为name+.lock的文件
func Lock(name string) error {
	lockPath := filepath.Join(os.TempDir(), name+".lock")
	lock = flock.New(lockPath)

	locked, err := lock.TryLock()
	if err != nil {
		return err
	}
	if !locked {
		return os.ErrExist // 如果文件已被锁定，则返回错误
	}
	return nil
}

// Unlock 解锁之前通过Lock锁定的文件
func Unlock() error {
	if lock != nil {
		return lock.Unlock()
	}
	return nil
}
